package com.itmck.config;

import feign.Logger;
import feign.Request;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 有时候我们遇到 Bug，比如接口调用失败、参数没收到等问题，或者想看看调用性能，就需要配置 Feign 的日志了，以此让 Feign 把请求信息输出来。
 * 注意： 此处配置@Configuration注解就会全局生效，如果想指定对应微服务生效，就不能配置
 */
@Configuration
public class FeignConfig {
    /**
     * 日志级别
     *
     * @return
     */
    @Bean
    public Logger.Level feignLoggerLevel() {

        /**
         *
         * NONE【性能最佳，适用于生产】：不记录任何日志（默认值）。
         * BASIC【适用于生产环境追踪问题】：仅记录请求方法、URL、响应状态代码以及执行时间。
         * HEADERS：记录BASIC级别的基础上，记录请求和响应的header。
         * FULL【比较适用于开发及测试环境定位问题】：记录请求和响应的header、body和元数据。
         */
        return Logger.Level.FULL;
    }


    @Bean
    public Request.Options options() {
        /**
         * Options 的第一个参数是连接的超时时间（ms），默认值是 2s；第二个是请求处理的超时时间（ms），默认值是 5s。
         */
        return new Request.Options(5000, 10000);
    }

    /**
     * 自定义Feign拦截器
     *
     * @return
     */
    @Bean
    public FeignAuthRequestInterceptor feignAuthRequestInterceptor() {
        return new FeignAuthRequestInterceptor();
    }
}